package com.bjsxt;
/**入门案例*/
/*定义接口  接口中只有一个抽象方法*/
//无返回值，无参数
@FunctionalInterface
interface NoReturnNoParam01{
    void method();
}
//无返回值，有一个参数
@FunctionalInterface
interface NoReturnOneParam01{
    void  method(int a);
}
//无返回值，有多个参数
@FunctionalInterface
interface NoReturnMultiParam01{
    void method(int a,int b);
}
//有返回值，无参数
@FunctionalInterface
interface ReturnNoParam01{
    int method();
}
//有返回值，有一个参数
@FunctionalInterface
interface ReturnOneParam01{
    int method(int a);
}
//有返回值，有多个参数
@FunctionalInterface
interface ReturnMultiParam01{
    int method(int a,int b);
}
public class TestLambda01 {
    public static void main(String[] args) {
        //无返回值，无参数
       /* NoReturnNoParam01 noReturnNoParam01 = ()->{
            System.out.println("NoReturnNoParam01");
        };
        //Lambda表达式等同于实现了上面的NoReturnNoParam接口
        //接口中只有一个抽象方法
        noReturnNoParam01.method();*/
        /*简化版*/
        //主体包含了一个语句，就不需要使用大括号
        NoReturnNoParam01 noReturnNoParam01 = () -> System.out.println("NoReturnNoParam01");
        noReturnNoParam01.method();
        //无返回值，有一个参数
        /*NoReturnOneParam01 noReturnOneParam01 =(int a)->{
            System.out.println("NoReturnOneParam01 "+a);
        };
        noReturnOneParam01.method(11);*/
        //简化，一个参数无需要定义圆括号，但多个参数需要定义圆括号
        NoReturnOneParam01 noReturnOneParam01 = a -> {
            System.out.println("NoReturnOneParam01 " + a);
        };
        noReturnOneParam01.method(10);
        //无返回值，有多个参数
        /*NoReturnMultiParam01 noReturnMultiParam01 = (int a,int b)->{
            System.out.println("noReturnMultiParam01 "+a+" "+b);
        };
                noReturnMultiParam01.method(11,12);*/
        //简化
        NoReturnMultiParam01 noReturnMultiParam01 = (int a, int b) ->
                System.out.println("noReturnMultiParam01 " + a + " " + b);

        noReturnMultiParam01.method(11, 12);
        //有返回值，有无参数
       /* ReturnNoParam01 returnNoParam01 = ()->{
            System.out.println("ReturnNoParam01");
            return 22;
        };*/
        //简化
        //因为有两代码，所以不可以不要大括号
        ReturnNoParam01 returnNoParam01 = () -> {
            System.out.println("ReturnNoParam01");
            return 22;
        };
        //只有返回值
        ReturnNoParam01 returnNoParam02 = () -> 22;
        ReturnNoParam01 returnNoParam03 = () -> 22 + 10;
        System.out.println(returnNoParam02.method());
        System.out.println(returnNoParam03.method());
        //有返回值，有一个参数
        /*ReturnOneParam01 returnOneParam01 = (int a)->{
            System.out.println("ReturnOneParam01");
            return a;
        };
        System.out.println(returnOneParam01.method(21));*/
        //简化
        ReturnOneParam01 returnOneParam01 = a -> a;
        System.out.println(returnOneParam01.method(21));

        //有返回值，有多个参数
        /*ReturnMultiParam returnMultiParam = (int a,int b)->{
            System.out.println("ReturnMultiParam");
            return a+b;
        };
        System.out.println(returnMultiParam.method(11,22));
    }*/
        //简化
        ReturnMultiParam01 returnMultiParam01 = ( a,b) ->a+b;
        System.out.println(returnMultiParam01.method(6,13));
    }
}
